package com.sh.data.engine.repository.dao.workspace.manager.entity;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.sh.data.engine.repository.dao.base.EngineBaseModel;
import lombok.*;

import java.util.Date;

/**
 * @author: mengzheng.mhc
 * @date: 2024/6/12 15:33
 */
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_storage")
public class StorageEntity extends EngineBaseModel<StorageEntity> {

    /**
     * 存储名
     */
    private String storageName;

    /**
     * 存储类型
     */
    private String storageType;

    /**
     * 存储链接
     */
    private String storageLink;

    private String rmdbsInfo;

    @TableField(exist = false)
    private Rmdbs rmdbs;

    public Rmdbs getRmdbs() {
        return JSON.parseObject(rmdbsInfo, Rmdbs.class);
    }

    public void setRmdbs(Rmdbs rmdbs) {
        this.rmdbs = rmdbs;
    }

    public void setRmdbsInfo() {
        this.rmdbsInfo = JSON.toJSONString(this.rmdbs);
    }

    @Data
    @Builder
    @AllArgsConstructor
    public static class Rmdbs {

        /**
         * 用户名
         */
        private String username;

        /**
         * 密码
         */
        private String password;

        /**
         * 版本
         */
        private String version;

        /**
         * 服务器地址
         */
        private String server;

        /**
         * 端口号
         */
        private Integer port;

        /**
         * 数据库名
         */
        private String dbName;

        /**
         * 连接属性
         */
        private String connectionProperty;

        /**
         * 仅存储源为PG时使用
         */
        private String schema;

        /**
         * 仅存储源为Hive时使用
         */
        private String hiveSiteXmlPath;

        /**
         * 当存储源为hive时，上传的hive-site.xml的原始文件名
         */
        private String originalFilename;

        //    private String oracleConnectionType;

        public Rmdbs() {
        }

        public Rmdbs(String password) {
            this.password = password;
        }
    }

    /**
     * 存储的描述
     */
    private String storageDesc;

    /**
     * 存储是否可用，1：可用，0：不可用
     */
    @TableLogic(value = "1", delval = "0")
    private Integer rowState;

    /**
     * 1：连接成功，0：连接失败
     */
    private Integer status;

    /**
     * 是否可用的状态更新时间
     */
    private Date statusUpdateTime;
}
